package com.example.demo.util.json;



import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.util.TextUtils;


import java.lang.reflect.Type;

/**********************************************************
 * 摘 要： [通知模板相关接口. 业务通知的json解析模板]
 * 初始版本：1.0.0
 * @author WangX
 * 创建日期： 2018/11/24
 *****************************************************************/
@SuppressWarnings("all")
public final class JsonUtils {


    public static String toJsonDefault(Object object) {
        if (object == null) {
            return null;
        } else {
            return JSON.toJSONString(object);
        }
    }


//    /**
//     * json格式化显示(只做打印日志使用)
//     *
//     * @param json
//     * @return
//     */
//    public static String jsonFormat(String json) {
//        if (TextUtils.isEmpty(json)) {
//            return null;
//        }
//        int indent = 4;
//        try {
//            if (json.startsWith("{")) {
//                JSONObject jsonObject = new JSONObject(json);
//                return jsonObject.toString(`indent`);
//            } else if (json.startsWith("[")) {
//                JSONArray jsonArray = new JSONArray(json);
//                return jsonArray.toString(indent);
//            } else {
//                return json;
//            }
//        } catch (JSONException e) {
//            return Log.getStackTraceString(e) + "\n\njson = " + json;
//        }
//    }
//
//    /**
//     * json格式化显示(只做打印日志使用)
//     *
//     * @param json
//     * @return
//     */
//    public static String toJsonFormat(Object json) {
//        return jsonFormat(toJsonDefault(json));
//    }


    /**
     * 普通对象解析
     *
     * @param json
     * @param classParent
     * @param <T>
     * @return
     */
    public static <T> T fromJson(String json, Class<T> classParent) {
        //TODO callback 要不要直接返回String呢
        if (TextUtils.isEmpty(json)) {
            return null;
        }
        return JSON.parseObject(json, classParent);
    }

    /**
     * 将一个对象找一个新的对象
     *
     * @param object
     * @param classParent
     * @param <T>
     * @return
     */
//    public static <T> T parseNewObject(Object object, Class<T> classParent) {
//        if (object == null) {
//            return null;
//        }
//        String json = toJsonFormat(object);
//        if (TextUtils.isEmpty(json)) {
//            return null;
//        }
//        return JSON.parseObject(json, classParent);
//    }

    /**
     * 普通对象解析
     *
     * @param json
     * @param classParent
     * @param <T>
     * @return
     */
    public static <T> T fromJson(String json, MyJsonType<T> type) {
        if (TextUtils.isEmpty(json)) {
            return null;
        }
        return JSON.parseObject(json, type.getType());
    }

    /**
     * 普通对象解析
     *
     * @param json
     * @param classParent
     * @param <T>
     * @return
     */
    public static <T> T fromJson(String json, Type type) {
        if (TextUtils.isEmpty(json)) {
            return null;
        }
        return JSON.parseObject(json, type);
    }
}
